/**
 * @addtogroup srt_storage_nvm_interface
 * srt_storage_nvm_interface
 * @{
 */
/**
 * @file         srt_storage_nvm_interface.h
 * @brief        
 * @note    
 * @author       Akee(shengkun.you@hopechart.com,尤胜坤)
 *
 * @par          修改日志
 * <table>
 * <tr><th>Date        <th>Version               <th>Author                                    <th>Description
 * <tr><td>2022-12-07  <td>1.0                   <td>Akee(shengkun.you@hopechart.com,尤胜坤)   <td>创建初始版本
 * @copyright    杭州鸿泉物联网技术股份有限公司
 */
#ifndef _SRT_STORAGE_NVM_INTERFACE_H_
#define _SRT_STORAGE_NVM_INTERFACE_H_
#include "ofc/ofc_types.h"
#include "srt_storage_interface.h"

#ifdef __cplusplus
extern "C" {
#endif
typedef struct ISrtStorageNvmTag ISrtStorageNvm;

/**
 * 写入Nvm（非易失性存储)的数据
 * @param self: 对象指针
 * @param offset: 偏移量
 * @param data: 数据内容
 * @param data_len: 数据长度
 * @return >0: 写入的长度; <0: 错误码，@ref 参考 THccMidSrtStorageErrorCodeEnum
 */
typedef Int32 (*ISrtStorageNvmWriteCallback)(ISrtStorageNvm *sender, UInt32 offset, const UInt8 *data, Int32 data_len);

/**
 * 读出Nvm（非易失性存储)的数据
 * @param self: 对象指针
 * @param offset: 偏移量
 * @param buf: 读取存放的buf缓冲
 * @param buf_size: buf缓冲大小
 * @return >0: 读取的长度; <0: 错误码，@ref 参考 THccMidSrtStorageErrorCodeEnum
 */
typedef Int32 (*ISrtStorageNvmReadCallback)(ISrtStorageNvm *sender, UInt32 offset, UInt8 *buf, Int16 buf_size);

/**
 * 擦除Nvm（非易失性存储),从offset开始，擦除size大小
 * @param self: 对象指针
 * @param offset: 偏移量
 * @param size: 擦除大小，不足一页，按照一页
 * @return @ref 参考 THccMidSrtStorageErrorCodeEnum
 */
typedef Int32 (*ISrtStorageNvmEraseCallback)(ISrtStorageNvm *sender, UInt32 offset, Int32 size);

/**
 * 属性存储接口集
 */

struct ISrtStorageNvmTag
{
    ISrtStorageNvmWriteCallback DoWrite;
    ISrtStorageNvmReadCallback DoRead;
    ISrtStorageNvmEraseCallback DoErase;
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return 
 */
void TSrtStorageNvmCreate(ISrtStorageNvm *self);

/**
 * 析构函数
 * @param self: 对象指针
 * @return 
 */
void TSrtStorageNvmDestroy(ISrtStorageNvm *self);

/**
 * 写入Nvm（非易失性存储)的数据
 * @param self: 对象指针
 * @param offset: 偏移量
 * @param data: 数据内容
 * @param data_len: 数据长度
 * @return >0: 写入的长度; <0: 错误码，@ref 参考 THccMidSrtStorageErrorCodeEnum
 */
Int32 TSrtStorageNvmWrite(ISrtStorageNvm *self, UInt32 offset, const UInt8 *data, Int32 data_len);

/**
 * 读出Nvm（非易失性存储)的数据
 * @param self: 对象指针
 * @param offset: 偏移量
 * @param buf: 读取存放的buf缓冲
 * @param buf_size: buf缓冲大小
 * @return >0: 读取的长度; <0: 错误码，@ref 参考 THccMidSrtStorageErrorCodeEnum
 */
Int32 TSrtStorageNvmRead(ISrtStorageNvm *self, UInt32 offset, UInt8 *buf, Int16 buf_size);

/**
 * 擦除Nvm（非易失性存储),从offset开始，擦除size大小
 * @param self: 对象指针
 * @param offset: 偏移量
 * @param size: 擦除大小，不足一页，按照一页
 * @return @ref 参考 THccMidSrtStorageErrorCodeEnum
 */
Int32 ISrtStorageNvmErase(ISrtStorageNvm *self, UInt32 offset, Int32 size);
#ifdef __cplusplus
} // extern "C" {
#endif

#endif

/**
 * @} 
 */


